package top.vains.server;
 
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.lang.management.ManagementFactory;
import java.math.BigDecimal;

import static java.math.BigDecimal.ROUND_HALF_UP;
import static java.math.BigDecimal.valueOf;

/**
 * 虚拟机相关设置
 * @author vains
 *
 */
public class Jvm implements Serializable {
	/**
     * 当前JVM占用的内存总数(M)
     */
	@Setter
    private double total;
 
    /**
     * JVM最大可用内存总数(M)
     */
	@Setter
    private double max;
 
    /**
     * JVM空闲内存(M)
     */
	@Setter
    private double free;
 
    /**
     * JDK版本
     */
	@Getter
	@Setter
    private String version;
 
    /**
     * JDK路径
     */
	@Getter
	@Setter
    private String home;
 
    public double getTotal() {
        BigDecimal b = valueOf(total / (1024 * 1024));
        return b.setScale(2, ROUND_HALF_UP).doubleValue();
    }
 
    public double getMax() {
        BigDecimal b = new BigDecimal(max / (1024 * 1024));
        return b.setScale(2, ROUND_HALF_UP).doubleValue();
    }
 
    public double getFree() {
        BigDecimal b = new BigDecimal(free / (1024 * 1024));
        return b.setScale(2, ROUND_HALF_UP).doubleValue();
    }
 
    public double getUsed() {
        BigDecimal b = new BigDecimal((total - free) / (1024 * 1024));
        return b.setScale(2, ROUND_HALF_UP).doubleValue();
    }
 
    public double getUsage() {
        BigDecimal b = new BigDecimal((total - free) / total * 100);
        return b.setScale(2, ROUND_HALF_UP).doubleValue();
    }
 
    /**
     * 获取JDK名称
     */
    public String getName() {
        return ManagementFactory.getRuntimeMXBean().getVmName();
    }

}